package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.anno.Log;
import com.itheima.mapper.DeptMapper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.DeptService;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Service //交给spring管理
@Slf4j
public class EmpServiceImpl implements EmpService {
    // 会依赖 mapper层 完成数据库数据的增删改查
    @Autowired
    private EmpMapper empMapper;


    @Override
    @Log
    public void delete(ArrayList<Integer> ids) {
        // 调用 mapper去处理
        empMapper.delete(ids);
    }

    /**
     *  完成条件分页查询 封装一个pageBean对象
     * @param name     条件 姓名
     * @param gender   条件 性别
     * @param begin    条件 入职起始时间
     * @param end      条件 入职结束时间
     * @param page     分页条件  当前的页码   --- pageHelper去完成
     * @param pageSize 分页条件  每页显示条数 --- pageHelper去完成
     * @return
     */
    @Override
    public PageBean page(String name, Short gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
        // 体现分页查询
        // 使用 PageHelper 套路
        // 1: 设置分页参数   分页插件要干涉 你的sql执行了
        PageHelper.startPage(page,pageSize);
        //2: 执行我们的 基础sql  ---就是被分页插件干涉的 sql
        List<Emp> empList = empMapper.list(name,gender,begin,end);//基础条件查询
        log.info("查看一下 基础sql执行之后 是不是 封装了当前页的数据:"+empList);
        // 我们希望  插件干涉 sql 之后  完成分页数据的查询
        //  empList是  当前页的数据
        // 希望 分页插件 能够帮助我们 获取 总记录数 和 当前页数据
        // 3 解析page对象
        Page<Emp> p = (Page<Emp>)empList;//向下转型  因为想要用子类特有功能
        long total = p.getTotal();//获取总记录数
        //当前页数据
        List<Emp> rows = p.getResult();
        log.info("查看一下 rows的数据和 empList数据是否一致"+rows);

        PageBean pb = new PageBean();
        //需要两个属性
        pb.setTotal(total);
        pb.setRows(rows);
        return pb;
    }
    // 完成员工的添加
    @Override
    @Log
    public void save(Emp emp) {
        //做添加 都要去思考  emp有没有要补充 属性信息
        // 补充  创建时间 更新时间
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        //再把设置好的emp交给 mapper去添加
        empMapper.insert(emp);
    }

    @Override
    public Emp findById(Integer id) {
        return empMapper.findById(id);
    }

    @Override
    @Log
    public void update(Emp emp) {
        //1：补充基础字段 更新时间
        emp.setUpdateTime(LocalDateTime.now());
        //2:找到 mapper完成更新
        empMapper.update(emp);
    }

    @Override
    public Emp login(Emp emp) {
        Emp loginEmp = empMapper.getUserByUsernameAndPassword(emp);//emp是封装了 登录的账户和密码
        return loginEmp;
    }
}
